{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7057e903",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.datasets import load_iris\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2c497628",
   "metadata": {},
   "outputs": [],
   "source": [
    "# load data\n",
    "iris = load_iris()\n",
    "df = pd.DataFrame(iris.data, columns=iris.feature_names)\n",
    "df['label'] = iris.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "733fe8dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    50\n",
       "1    50\n",
       "2    50\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns = [\n",
    "    'sepal length', 'sepal width', 'petal length', 'petal width', 'label'\n",
    "]\n",
    "df.label.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b4fd9316",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2a520b57d00>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')\n",
    "plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6e606abb",
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.array(df.iloc[:100, [0, 1, -1]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "09c813c2",
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = data[:,:-1], data[:,-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "7b4fa1d7",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = np.array([1 if i == 1 else -1 for i in y])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9cb89afa",
   "metadata": {},
   "source": [
    "# Perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "c079eb8d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据线性可分，二分类数据\n",
    "# 此处为一元一次线性方程\n",
    "class Model:\n",
    "    def __init__(self):\n",
    "        self.w = np.ones(len(data[0]) - 1, dtype=np.float32)\n",
    "        self.b = 0\n",
    "        self.l_rate = 0.1\n",
    "        # self.data = data\n",
    "\n",
    "    def sign(self, x, w, b):\n",
    "        y = np.dot(x, w) + b\n",
    "        return y\n",
    "\n",
    "    # 随机梯度下降法\n",
    "    def fit(self, X_train, y_train):\n",
    "        is_wrong = False\n",
    "        while not is_wrong:\n",
    "            wrong_count = 0\n",
    "            for d in range(len(X_train)):\n",
    "                X = X_train[d]\n",
    "                y = y_train[d]\n",
    "                if y * self.sign(X, self.w, self.b) <= 0:\n",
    "                    self.w = self.w + self.l_rate * np.dot(y, X)\n",
    "                    self.b = self.b + self.l_rate * y\n",
    "                    wrong_count += 1\n",
    "            if wrong_count == 0:\n",
    "                is_wrong = True\n",
    "        return 'Perceptron Model!'\n",
    "\n",
    "    def score(self):\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "0a700894",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Perceptron Model!'"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perceptron = Model()\n",
    "perceptron.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "311776cb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2a525964fd0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_points = np.linspace(4, 7, 10)\n",
    "y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]\n",
    "plt.plot(x_points, y_)\n",
    "\n",
    "plt.plot(data[:50, 0], data[:50, 1], 'o', color='blue', label='0')\n",
    "plt.plot(data[50:100, 0], data[50:100, 1], 'o', color='orange', label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a563cda",
   "metadata": {},
   "source": [
    "# scikit-learn实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "a666aca9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sklearn\n",
    "from sklearn.linear_model import Perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1fe4d52b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.1.1'"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sklearn.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "67d87370",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Perceptron()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">Perceptron</label><div class=\"sk-toggleable__content\"><pre>Perceptron()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "Perceptron()"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = Perceptron(fit_intercept=True, \n",
    "                 max_iter=1000, \n",
    "                 shuffle=True)\n",
    "clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "d2d5c9ae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 23.2 -38.7]]\n"
     ]
    }
   ],
   "source": [
    "# Weights assigned to the features.\n",
    "print(clf.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "ae5426e3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-5.]\n"
     ]
    }
   ],
   "source": [
    "# 截距 Constants in decision function.\n",
    "print(clf.intercept_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "b5e02bf9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2a525c98fd0>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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YkxmpoJWrNKhRhERERGXKHiJiIiIuETBS0RERMQlCl4iIh7x+rIvIuI+BS8REQ9UXPalsBCs3XPZF4Uv8VK0XCS7Ng6mlkGDBoWtjppS8BIR8YCbl32ROJQfgGlpMCHJuc13N7FH+iLZtRFNtdSEgpeIiAfcvOyLxJn8AMzIgmAhYJ3bGVkRCV+DBg3itttu4/TTT/9Ve4WdO3dyzjnnMHDgQC644AJKS0ur3NbYsWOZNm0aAA899BBTpkwhGAwyZMgQBg4cyA033FDt4+7rMfaupbi4mKFDh3LiiSdyzjnnEAwG2bVrF8OGDeOkk04iMzOT3bt3V1lfdetV1wcHSsFLRMQDbl72ReJM3hgoqzRcWhZ02sMsnBfJvvjii5k+fToAn3/+OWeddVaVF8mu6nGreoyqZGdnk56ezpdffslFF13EvHnzqrzAdlWqW68mfVAbOoGqiIgHxo515nTtfbjRy8u+SAwJVjMsWl37QQjnRbIBVqxYwdatW2nWrBkNGzas9iLZlR+3qseoysKFC7nooosAuOqqqwD497///asLbFelqgtx17QPakMjXiIiHsjMhOxsSE0FY5zb7GydjVxqwF/NsGh17QchnBfJBujbty+PP/445513HkC1F8mu/Lg1fYxu3brx/fffA/Dggw/y3HPPVXmB7apUt15N+qA2FLxERDySmQkFBVBe7twqdEmNpI8FX6WrZPv8TrsHanqRbICLL76Yxx9/nHPOOQeg2otkH+hjXHvttcyaNYtBgwYxa9YsLr/88iovsF2Vmq53sHSRbBEREY/V9iLZ5AecOV3BImekK30sdFBy94Iuki0iIhLvOmQqaMUoHWoUERGJArFwBEp+6UBeMwUvERERj9WvX58NGzYofMUQay0bNmygfv36tfo5HWoUERHxWLt27VixYgXr1q3zuhSphfr169OuXbta/YyCl4iIiMfq1KlDhw4dvC5DXKBDjSIiIiIuUfASERERcYmCl4iIiIhLFLxEREREXKLgJSIiIuISBS8RERERlyh4iYiIiLhEwUtERETEJQpeIiIiIi5R8BIRERFxiYKXiIiIiEsUvERERERcouAlIiIi4hIFLxERERGXKHiJiIiIuETBS0RERMQlCl4iIiIiLlHwEhEREXGJgpeIiIiISxS8RERERFyi4CUiIiLiEgUvEREREZcoeImIiIi4RMFLRERExCUKXiIiIiIuUfASERERcYmCl4iIiIhLFLxEJOEEApCWBklJzm0g4HVFIpIokr0uQETETYEAZGVBMOgsFxY6ywCZmd7VJSKJQSNeIpJQxozZE7oqBINOu4hIpCl4iUhCKSqqXbuISDgpeIlIQklJqV27iEg4KXiJSEIZOxb8/l+2+f1Ou4hIpCl4iUhCycyE7GxITQVjnNvsbE2sFxF36FONIpJwMjMVtETEGxrxEhEREXGJgpeIiIiISxS8RERERFyi4CUiIiLiEgUvEREREZcoeImIiIi4RMFLRERExCUKXiIiIiIuUfASERERcYmCl4iIiIhLFLxEREREXKLgJSIiIuISBS8RERERlyh4iUiNBAKQlgZJSc5tIOB1RSIisSfZ6wJEJPoFApCVBcGgs1xY6CwDZGZ6V5eISKzRiJeI7NeYMXtCV4Vg0GkXEZGaU/ASkf0qKqpdu4iIVE3BS0T2KyWldu0iIlI1BS8R2a+xY8Hv/2Wb3++0i4hIzSl4ich+ZWZCdjakpoIxzm12tibWi4jUlj7VKCI1kpmpoCUicrA04iUiIiIJ4eul6yncsMPTGhS8REREJK6VlJXz9/cWkvn8dzz2wWJPa9GhRhEREYlbyzcGuWlSLrOKNnNpRnvuOa+7p/UoeImIiEhcemfOau6YOgcsjBvWh3PTD/e6JAUvERERiS87d5dx39sLmDijiN7tmzFuWB/at/Dv/wddoOAlIiIicWPhmq2MnJDLkp+2c/1Jnbjlt0dQxxc9U9oVvERERCTmWWt5+bsiHnh7AU0a1OGlP/RlQJfWXpf1KwpeIiIiEtM2B3dzx2tzeXf+Gk46ojWPXpJOq0b1vC6rSgpeIiIiErO+L9jITRNzWbd9F2POOpI/nNiBpCTjdVnVUvASERGRmFNWbvnnJ0t5/MPFtG/h57Xh/enVrpnXZe2XgpeIiIjElDVbihn9Si7f/riRwb0P5/7BPWlcv47XZdWIgpeIiIjEjA8WrOW2V/PYXVrOIxenc9HRbTEmeg8tVhY9n68UEZFaCwQgLQ2SkpzbQMDrikQio7ikjHvfnM+1/82hbbMGvD3yRIYc0y6mQhdEaMTLGNMGeNda26ea+58HugPvWGsfiEQNIiLxLhCArCwIBp3lwkJnGSAz07u6RMJt2brtjJyQy4LVW7n6hA7cfmZX6iX7vC7rgERqxOsRoEFVdxhjLgR81trjgY7GmC4RqkFEJK6NGbMndFUIBp12kXhgrWVyznLOefJL1mwt5vkrM7j73O4xG7ogAiNexphTgB3AmmpWGQRMDn3/PnAisKSK7WQBWQApKSnhLlNEJOYVFdWuXSSWbCsuYczr83gzbxXHd2zJ40N706ZJfa/LOmhhHfEyxtQF7gLu2MdqDYGVoe83Am2qWslam22tzbDWZrRuHX1nnhUR8Vp1/5Pqf1WJdbOXb+bsJ7/knbmrufW3R/DyNcfFReiC8B9qvAMYb63dvI91trPnMGSjCNQgIpIQxo4Ff6Xr/vr9TrtILCovtzzz2TKGPP01ZeWWydf148ZTuuCL4hOi1la4Q8+pwA3GmE+B3saY56pYZybO4UWAdKAgzDWIiCSEzEzIzobUVDDGuc3O1sR6iU3rtu3iyhdn8NfpCzmtexv+N2oAx6S28LqssDPW2shs2AlfI4DLrLV37tXeBPgC+Ag4E+hnrd2yr21lZGTYnJyciNQpIiIi3vp88TpunjybbcWl3HNuD4b1bR9zp4nYmzFmprU2o6r7InYCVWvtoNC3d1Zq32qMGQScBjy8v9AlIiIi8Wl3aTmPvr+IZz//kSPaNGLCtf04ok1jr8uKKE/OXG+t3cSeTzaKiIhIginaEGTkxFnkrdhC5nEp3HVOd+rXid3TRNSULhkkIiIirnpj9krGvD6PJANPZx7NmUcd5nVJrlHwEhEREVfs2FXKvW/OZ8rMFWSkNufxob1p19y//x+MIwpeIiIiEnHzV21h5MRc8tfvYNQpnRn1my4k+xLvjFIKXiIiIhIx1lr+/XUBD/1vIc0b1iFwzXH079TK67I8o+AlIiIiEbFxx27+9GoeH/7wE7/pdgh/vzidFg3rel2WpxS8REREJOy+WbaB0a/ksmlHCfec252r+qfF9Lm5wkXBS0RERMKmtKycJz9awrhPltKhZUOev/JYerZt6nVZUUPBS0RERMJi5ead3DQxl5zCTQw5ph1/Oa8HDespauxNvSEiIiIH7d15q/nTq3Mot/DE0N6c37ut1yVFJQUvEREROWDFJWU88M4CXv62iF7tmjJuWB9SWzb0uqyopeAlIiIiB2Tx2m2MnJDLorXbuG5gR275bVfqJifeublqQ70jIjFlxAhITgZjnNsRI7yuSCTxWGuZ8F0R5z31JRt27OI/V/flz2cdqdBVAxrxEpGYMWIEPP30nuWysj3L48d7U5NIotmys4T/mzqXd+auZkCXVjx6STqHNK7vdVkxw1hrva5hvzIyMmxOTo7XZYiIx5KTnbBVmc8HpaXu1yOSaGYWbmTUxNms3VrMrad3JWtAR5KSdG6uyowxM621GVXdpxEvEYkZVYWufbWLSHiUlVue+WwZj32wmMOb1WfK9cfTJ6W512XFJAUvEYkZPl/1I14iEhlrtxbzx1dm8/WyDZybfjhjL+hJk/p1vC4rZmkWnIjEjKys2rWLyMH5eOFaznziC3KLNvPwRb14cmhvha6DpBEvEYkZFRPos7OdkS+fzwldmlgvEl67Ssv42/RFvPBVPkce1oRxw/rQ+ZBGXpcVFxS8RCSmjB+voCUSST+u286oSbnMW7mVq/qncceZ3ahfR8fzw0XBS0RERAB4beYK7npjHnWTk/jXFRmc1r2N1yXFHQUvERGRBLd9Vyl3TZvH67krOa5DCx4f2pvDmjbwuqy4pOAlIiKSwOau2MLIibMo2hjkj6cewY2ndManc3NFjIKXiIhIAiovtzz/ZT4Pv7eQ1o3qMSnrePp2aOF1WXFPwUtERCTBrN++i1sm5/HZ4nWc3qMNf7uoF838db0uKyEoeImIiCSQL5es54+TZ7NlZwn3D+7J745LwRgdWnSLgpeIiEgCKCkr57EPFvPMZ8vo1LoRL/2hL90ObeJ1WQlHwUtERCTOLd8YZNSkXHKLNjOsb3vuPqcHDerq3FxeUPASERGJY2/PWcWfX5sLBv552dGc3eswr0tKaApeIiIicSi4u5T73lrApO+X0yelGU8O7UP7Fn6vy0p4Cl4iIiJx5ofVW7lxwix+XL+DG07uxOhTj6COL8nrsgQFLxERkbhhreWlbwt54J0faNqgDi//4ThO6NzK67JkL4q/Igni1FPBmD1fp57qdUUSCEBaGiQlObeBgNcVSSzbHNzNdS/N5O435nNCp5a8e9MAha4opBEvkQRw6qnw0Ue/bPvoI6f9ww+9qSnRBQKQlQXBoLNcWOgsA2RmeleXxKYZ+Ru5aVIu67fv4s6zj+TqEzqQpMv+RCVjrfW6hv3KyMiwOTk5XpchErP2dW7EGHgLiEtpaU7Yqiw1FQoK3K5GYlVZuWXcx0t48qMlpLTwM27Y0RzVrqnXZSU8Y8xMa21GVfdpxEtExANFRbVrF6ls1eadjH5lNjPyN3Jhn7bcN7gnjerpz3q00yskIuKBlJSqR7xSUtyvRWLP+/PX8KfX5lBSWs5jl6Rz4dHtvC5JakiT60USwG9+U7t2ibyxY8Ff6ZRKfr/TLlKd4pIy7nljHlkvzaRd8wa8PWqAQleMUfASSQAffvjrkPWb32hivZcyMyE725nTZYxzm52tifVSvaU/bWPwP7/iP98Ucs2JHXhteH86tGrodVlSS5pcLyIiEsWstUzOWc69by7AX9fHIxenc3K3Q7wuS/ZBk+tFRERi0NbiEv5v6lzenrOaEzq35B+X9OaQJvW9LksOgoKXiIhIFMot2sSoSbms2lzMbad35fqTOuHTublinoKXiIhIFCkvtzz7+Y88+v4i2jSpz+TrjueY1OZelyVhouAlIiISJX7aVszNr+Tx5dL1nH3UYTx44VE0bVDH67IkjBS8REREosCni37ilsl57NhdykMXHsXQY9tj9nXZCYlJCl4iIiIe2l1azt/fW8i/vsin26GNmTSsH13aNPa6LIkQBS8RERGPFKzfwahJucxZsYXL+6Uy5uwjqV/H53VZEkEKXiIiIh6YlruSMa/PJdmXxDO/O4Yzeh7qdUniAgUvERERF+3YVcrdb8zntVkrODatOY8P7UPbZg28LktcouAlIiLiknkrtzBqYi4FG3Yw6jddGHVKZ5J9unpfIlHwEhERiTBrLS98VcDfpi+kRcO6TLi2H/06tvS6LPGAgpeIiEgEbdi+i9tencPHC3/i1CPb8PchvWjesK7XZYlHFLxEREQi5Otl6xk9aTabgyX85bweXHF8qs7NleB0YFkkQQQCkJYGSUnObSAQmzVEw/MQ2Z/SsnIeeW8Rmc99R6P6yUy74QSu7J+m0CUa8RJJBIEAZGVBMOgsFxY6ywCZmbFTQzQ8D5H9WbEpyE2TZjOzcBOXZLTj3vN64K+rP7fiMNZar2vYr4yMDJuTk+N1GSIxKy3NCSmVpaZCQUHs1BANz0NkX6bPXc3tr82h3MKDFx7FeemHe12SeMAYM9Nam1HVfYrgIgmgqKh27dFaQzQ8D5Gq7Nxdxn1vL2DijCLS2zdj3NA+pLT0e12WRCHN8RJJACkptWuP1hqi4XmIVLZozTbO/+eXTJxRxPUndeLV649X6JJqKXiJJICxY8Ff6e+A3++0x1IN0fA8RCpYa3n520LOe+pLNu4o4aU/9OWOM7tRRydElX3Q3iGSADIzITvbmQtljHObne3uhPRw1BANz0MEYEuwhBGBWdw5bR7HdWzJ9JsGMKBLa6/LkhigyfUiIiK1kFOwkZsmzWbt1mL+dEZXrjmxI0lJOk2E7KHJ9SIiIgeprNwy/pOlPP7REto2a8Brw/uT3r6Z12VJjFHwEhER2Y81W4oZ/Uou3/64kfN7H84Dg3vSuH4dr8uSGKTgJSIisg8f/bCWW6fksau0nEcuTueio9vqDPRywBS8REREqrCrtIyH/reQf39dQI/Dm/DksD50at3I67Ikxil4iYiIVLJs3XZGTshlweqt/P6ENO44sxv1kn1elyVxQMFLREQkxFrLqzNXcM+b86mXnMTzV2bwmyPbeF2WxBEFLxEREWBbcQl3TpvHG7NX0a9jCx6/tA+HNq3vdVkSZxS8REQk4eUt38zIibms3LyTW397BMMHdcanc3NJBCh4iYhIwiovtzz35Y88/O4i2jSpzytZ/chIa+F1WRLHFLxERCQhrdu2i1um5PH54nWc2fNQ/nphL5r6dW4uiSwFLxERSTifL17HzZPz2FZcwtgLenJZ3xSdm0tcoeAlIiIJY3dpOY9+sIhnP/uRI9o0InDNcXQ9tLHXZUkCUfASEZGEULQhyMhJueQt38xlx6Vw19ndaVBX5+YSdyV5XYBIVQIBSEuDpCTnNhDwuqIDF47nEk/9IeKFN/NWcfaTX5C/bjtPZx7NgxccpdAlntCIl0SdQACysiAYdJYLC51lgMxM7+o6EOF4LvHUHyJuC+4u5Z435jNl5gqOSW3OE0N706653+uyJIEZa63XNexXRkaGzcnJ8boMcUlamhMuKktNhYICt6s5OOF4LvHUHyJumr9qCyMn5pK/fgc3ntyZm37ThWSfDvRI5BljZlprM6q6TyNeEnWKimrXHs3C8VziqT9E3GCt5T9fF/Dg/xbSvGEdAtccR/9OrbwuSwTQHC+JQikptWuPZuF4LvHUHyKRtmnHbq7970zufWsBA7q0YvpNAxW6JKooeEnUGTsW/JWmYPj9TnusCcdziaf+EImkb3/cwJlPfMHni9dx9zndee7KDFo0rOt1WSK/oOAlUSczE7KznTlMxji32dmxOZE8HM8lnvpDJBJKy8p57IPFXPavb2lQ18fUEf25+sQOOiGqRCVNrhcRkZi1cvNORk/K5fuCTVx0dDvuO78HDetp+rJ4S5PrRUQk7rw7bw23vzaHsnLL45f2ZnCftl6XJLJfCl4iIhJTikvKeOCdBbz8bRG92jVl3LA+pLZs6HVZIjWi4CUiIjFjydptjJyYy8I128ga2JFbf9uVusmariyxQ8FLRESinrWWSd8v5y9vzadRvWT+/ftjGdT1EK/LEqk1BS8REYlqW3aW8H9T5/LO3NWc2LkVj12aziGN63tdlsgBUfASEZGoNbNwE6Mm5rJ2azG3n9GN6wZ2JClJp4mQ2KXgJSIiUaes3PLMZ8t47IPFHN6sPlOuP54+Kc29LkvkoCl4iYhIVFm7tZibJ8/mq6UbOKfXYTx44VE0qV/H67JEwkLBS0REosYnC3/ilil57NxdxsMX9eLijHY6A73EFQUvERHx3K7SMh5+dxHPf5lPt0Mb89Rlfeh8SGOvyxIJOwUvERHxVP76HYycOIt5K7dy5fGp/PmsI6lfx+d1WSIREZHgZYxpARwD5Fpr10fiMUREJPZNnbWCu6bNo05yEtmXH8NvexzqdUkiERX20/0aY5oDbwN9gU+MMa2rWCfZGFNkjPk09HVUuOsQiScjRkByMhjj3I4Y4f42AgFIS4OkJOc2EKh9DdEinp5LrNq+q5Q/vjKbmyfn0aNtU6bfNEChSxJCJEa8egE3W2u/DYWwo4H3qlhnorX29gg8vkhcGTECnn56z3JZ2Z7l8ePd2UYgAFlZEAw6y4WFzjJAZmbNaogW8fRcYtXcFVsYOXEWRRuD/PHUI7jxlM74dG4uSRDGWhuZDRszEHgAOMdau7XSfSOAG4AdwFzgOmttaXXbysjIsDk5ORGpUyTaJSc7Qakynw9Kq/2tCe820tKcgFJZaioUFNSshmgRT88l1pSXW174Kp+/vbuQVo3q8cTQPvTt0MLrskTCzhgz01qbUdV9kZrjZYBLgU1ASRWrfA+caq1dbYz5L3AW8GalbWQBWQApKSmRKFMkJlQVmPbVHoltFBXVrj2axdNziSXrt+/i1il5fLpoHb/t3oaHh/Simb+u12WJuC4il3S3jhuAOcB5Vawyx1q7OvR9DtClim1kW2szrLUZrVv/apqYSMLwVfPhruraI7GN6v73icX/ieLpucSKr5au58wnvuDrZRu4//wePHv5MQpdkrAiMbn+dmPMFaHFZsDmKlZ7yRiTbozxAYOBvHDXIRIvKuYf1bQ9EtsYOxb8/l+2+f1Oe6yJp+cS7UrKynn43YX87vnvaNqgDm/ccAKXH5+mE6JKQovEiFc2cLkx5nPAB6wwxjxQaZ37gJeA2cA31toPI1CHSFwYPx6GD98zOuXzOcs1nVgfjm1kZkJ2tjMPyhjnNjs7Niejx9NziWbLNwa55NlvGP/pMoYe2543bzyBIw9r4nVZIp6L2OT6cNLkehGR2PHOnNXcMXUOWHjooqM4p9fhXpck4irXJ9eLiEji2bm7jL+8NZ9J3y+nT0oznhzah/Yt/Pv/QZEEouAlIiIHbeGardw4IZdl67YzYlAn/njaEdTxReTzWyIxTcFLREQOmLWWl78t5P53fqBpgzq8dPVxnNillddliUQtBS8RETkgm4O7uf21Obw3fy2DurbmkYvTadWontdliUQ1BS8REam1GfkbGT0pl3Xbd3Hn2Udy9QkdSNJlf0T2S8FLRERqrKzc8tTHS3nio8WktPAzdfgJHNWuqddlicQMBS8REamR1Vt2ctOk2czI38gFfdpy/+CeNKqnPyMitaHfGBER2a8PFqzltlfz2F1azmOXpHPh0e28LkkkJil4iYhItYpLynjofz/wn28K6dm2CeOGHU2HVg29LkskZil4iYhIlZb+tJ2RE3P5YfVW/nBiB/50RlfqJdfi6uwi8isKXiIi8gvWWqbkrOCeN+fToK6PF686lpO7HeJ1WSJxQcFLRER+trW4hDGvz+OtvFX079SSf1zamzZN6ntdlkjcUPASEREAcos2MWpSLqs2F3Pb6V25/qRO+HRuLpGw0oW0JCoFApCWBklJzm0g4E0dI0ZAcjIY49yOGBG7dRxsn+o1iV/l5ZanP13Gxc98Q3k5TL7ueG44uXPtQld+AKalwYQk5zbfox1EJNpZa6P+65hjjrGSOF5+2Vq/31rY8+X3O+1uGj78lzVUfA0fHnt1HGyf6jWJX2u37rS/e+5bm3r723bEyzPt5uDu2m/kx5etneS3NsCer0l+p10kAQE5tppMY5z7o1tGRobNycnxugxxSVoaFBb+uj01FQoK3KsjORnKyn7d7vNBaWls1XGwfarXJD59tngdt0yezfZdpdxzbg+GHtseYw7g0OK0NAhWsYP4U2FwwcGWKRJzjDEzrbUZVd2nOV4SdYqKatceKVX9gd9XezTXcbB9qtckvuwuLeeR9xeR/fmPdG3TmInX9qNLm8YHvsFgNTtCde0iCUxzvCTqpKTUrj1SfNWcrqi69miu42D7VK9J/ChYv4Mhz3xN9uc/cnm/VN648YSDC10A/mp2hOraRRKYgpdEnbFjwe//ZZvf77S7KSurdu3RXMfB9qlek/gwLXcl54z7koL1O3jmd8dw/+Ce1K8ThtSaPhZ8lXYQn99pF5Ffqm7yVzR9aXJ94nn5ZWtTU601xrl1exJ3heHDrfX5nAncPp93k7jDUcfB9qlek9i1vbjE3vzKbJt6+9t2yNNf2RWbguF/kB9ftvb1VGsDxrnVxHpJYGhyvYhIYpq3cgujJuZSsGEHN57ShVGndCbZp4MdIpGkyfUiIgnGWsuLXxXw1+kLadGwLhOu7Ue/ji29Lksk4Sl4iYjEmQ3bd3Hbq3P4eOFPnHrkITw8JJ0WDet6XZaIoOAlIhJXvl62ntGTZrM5WMK953bnyv5pB3ZuLhGJCAUvEZE4UFpWzhMfLeGpT5bSoVVDXvz9sfQ4vKnXZYlIJQpeIiIxbsWmIDdNms3Mwk1cktGOe8/rgb+u3t5FopF+M0VEYtj0uau5/bU5lFt4Ymhvzu/d1uuSRGQfFLxERGJQcUkZ9729gAnfFZHevhnjhvYhpaV//z8oIp5S8BIRiTGL1mxj5MRZLF67netO6sgtp3WlbrLOzSUSCxS8RERihLWWwHdF3P/2AhrXr8N/r+7LwCNae12WiNSCgpeISAzYEizhjqlzmD5vDQO6tOKxS3rTunE9r8sSkVrab/AyxnQHzgN+Pvuetfa+SBYlIiJ75BRs5KZJs1m7tZg/n9mNawd0JClJ5+YSiUU1GfGaDPwVWB7hWkREZC9l5Zbxnyzl8Y+W0LZZA14b3p/09s28LktEDkJNZmOuBSZaaz+r+Ip0USLyS4EApKVBUpJzGwh4sw1xz5otxWQ+9y2PfrCYc3odxjujTlTockN+AKalwYQk5zZfvygSXtWOeBljrgh9mwd8YoyZCOwAsNb+14XaRAQnIGVlQTDoLBcWOssAmZnubUPc89EPa7l1Sh7FJeX8fUgvhhzTTpf9cUN+AGZkQVnoFyVY6CwDdNAvioSHsdZWfYcxV1bzM9bt4JWRkWFzcnLcfEiRqJGW5gSlylJToaDAvW1I5O0qLeOh/y3k318X0P2wJoy7rA+dWjfyuqzEMS3NCVuV+VNhcIHb1UgMM8bMtNZmVHVftSNe1tr/hH64pbV2w14buyT8JYpIdYqKatceqW1IZC1bt52RE3JZsHorV/VP489ndaNess/rshJLsJpfiOraRQ5ATeZ4Tam0fEMkChGRqqWk1K49UtuQyLDWMiVnOeeO+5LVW3by3BUZ3HteD4UuL/ir+YWorl3kAFQbvIwxJxlj7gHSjDF3h77+BmxyrzwRGTsW/JWuBOP3O+1ubkPCb1txCaNfmc1tr86hV7umTL9pIKd2b+N1WYkrfSz4Kv2i+PxOu0iY7Ot0EgXAp8BgoOKTjDuB3IhWJCK/UDH5fcwY59BgSooTmGozKT4c25Dwylu+mVGTclm+Mcgtpx3BiJM749O5ubxVMYE+b4xzeNGf4oQuTayXMKp2cv3PKxgzylr7pEv1VEmT60UkXpSXW5778kcefncRbZrU54mhvclIa+F1WSISRgc0uX6v00ls3ut7QKeTEBE5EOu27eKWKXl8vngdZ/Q4lL9d1Ium/jpelyUiLtrXocaKMe9hQBGQA/QBugAKXiIitfDFknX88ZU8thWX8MDgnmQel6Jzc4kkoJqcTuIKa21WRbsx5mM3ChMRiQclZeU88v4inv3sR7oc0ojANcfR9dDGXpclIh6pybUatxhjHsM5g30PYFtkSxIRiQ9FG4KMnJRL3vLNXHZcCned3Z0GdXWaCJFEVpPgdQlwIdAB5xONd0a0IhGROPBm3irGTJ2LMTA+82jOOuowr0sSkSiw3+BlrS0FJrtQi4hIzAvuLuXeN+czOWcFx6Q254mhvWnX3L//HxSRhFCTES8REamB+au2MHJiLvnrd3DjyZ0ZfWoXkn01uUCIiCSKfZ1O4jFr7c3GmE+AipN9GZyLZJ/iSnUiIjHAWst/vi7gwf8tpJm/DoE/HEf/zq28LktEotC+PtV4c+j2ZPfKERGJLZt27Oa2V+fw4Q9rOaXbIfx9SC9aNqrndVkiEqV0qFFE5AB9++MGRk+azcYdu7n7nO78/oQ0nZtLRPZpv8HLGPM98AMwE5gF5Fprt0e6MBGRaFVaVs6THy/lqY+XkNqyIVOv7E/Ptk29LktEYkBNRrzOAM4GLgYeAgqBIyNZlIhItFq1eSc3Tcrl+4JNXHR0O+47vwcN6+nggYjUTE3eLRYBXwFvATdaawsjW5KISHR6d94abn9tDqVl5Tx+aW8G92nrdUkiEmNq8jnnLsAU4BxgiTFmVWRLEi8FApCWBklJzm0gELt1jBgByclgjHM7YkS4q3RPtLwuiaq4pIw7p83l+pdnktrSzzujBsRX6MoPwLQ0mJDk3OZrBzso6s/oFCWvS01GvF7BmdsVAG611i6ObEnilUAAsrIgGHSWCwudZYDMzNiqY8QIePrpPctlZXuWx48PX61uiJbXJVEtWbuNkRNzWbhmG9cO6MBtp3ejbnIcnZsrPwAzsqAstIMFC51lgA7awWpN/Rmdouh1Mdba/a/lsYyMDJuTk+N1GXEvLc35o15ZaioUFMRWHcnJTtiqzOeD0tKDqc590fK6JBprLZO+X85f3ppPw7rJPHJJOid3PcTrssJvWprzR6gyfyoMLnC7mtin/oxOLr8uxpiZ1tqMqu7TjFD5WVFR7dqjuY6qQte+2qNZtLwuiWTLzhL+b+pc3pm7mhM7t+KxS9M5pHF9r8uKjGA1O1J17bJv6s/oFEWvSxyNl8vBSkmpXXs01+Hz1a49mkXL65IoZhZu4qwnvuC9+Wu4/Yxu/PfqvvEbugD81exI1bXLvqk/o1MUvS4KXvKzsWPBX+lavn6/0x5rdVTMgappezSLltcl3pWXW/75yVIuefYbjIHJ1x/P8EGdSEqK8xOipo8FX6UdzOd32qX21J/RKYpeFwUv+VlmJmRnO3OHjHFus7Pdn8AdjjrGj4fhw/eMcPl8znKsTayH6Hld4tnarcVc/sJ3/P29RZzZ81D+d9MAjk5p7nVZ7uiQCX2znbkuGOe2b7Ymgh8o9Wd0iqLXRZPrRSShfbLwJ26Zkkdwdyl/Oa8Hl2S012V/ROSgaHK9iEglu0rLePjdRTz/ZT7dDm3MU5f1o/Mhjb0uS0TiXLXByxjzCVB5OMwA1lp7SkSrEhGJoPz1Oxg5cRbzVm7lyuNT+fNZR1K/Tgx+8kJEYk61wctae7KbhYiIuGHqrBXcNW0edZKTyL78GH7b41CvSxKRBKJDjSKSELbvKuWuafN4PXclfTu04PFLe3N4swZelyUiCWa/wcsY4wOOBireodpaaydGtCoRkTCau2ILIyfOomhjkNGndmHkKV3wxftpIkQkKtVkxOtVYBvQAVgFNAcUvEQk6pWXW174Kp+/vbuQVo3qMfHafhzXsaXXZYlIAqtJ8GoFDAEmW2svNcZ8EeGaREQO2vrtu7h1Sh6fLlrHad3b8PBFvWjesK7XZYlIgqtJ8CoCLgF2GWP+DDSJbEkiIgfnq6XrGf3KbLbsLOH+83vwu36pOjeXiESFmgSvy4GWwHTgQpwQJiISdUrKyvnHB4t5+rNldGrdiP9e3ZcjD9P/iiISPWr6qcYTgTRgKbA4YtWIiByg5RuDjJqUS27RZoYe2567z+2Ov64+uC0i0aUm70qTgJ+AOcBZwDDgskgWJSJSG+/MWc0dU+eAhXHD+nBu+uFelyQiUqWaBK9DrLU/H14MndFeRMRzO3eX8Ze35jPp++X0SWnGk0P70L6F3+uyRESqVZPgFTTG3AHMBPoCW4wxA621n0e2NBGR6i1cs5UbJ+SybN12RgzqxB9PO4I6viSvyxIR2aeavEt9B9QD+uMEtVxgUARrEiEQgLQ0SEpybgOB2K1jxAhITgZjnNsRI8JdZWKx1vLSNwWc99RXbNlZwktXH8efzuim0CUSCTNGwMRkmGCc2xkevYHlB2BaGkxIcm7zPfqjEAb7HfGy1v7FGNMTaItzaonl1trtEa9MElYgAFlZEAw6y4WFzjJAZmZs1TFiBDz99J7lsrI9y+PHh6/WRLE5uJvbX5vDe/PXMqhrax65OJ1Wjep5XZZIfJoxApbu9QZmy/Ys93XxDSw/ADOyoCz0ZhwsdJYBOrj4RyFMjLV23ysYMw44HOfM9XcB11lrz3Ohtp9lZGTYnJwcNx9SPJSW5oScylJToaAgtupITnbCVmU+H5SWHkx1iWdG/kZumpTL+u27uP2Mblx9QgeSdNkfkciZmOyErcqMD4a5+AY2Lc0JW5X5U2FwgXt11IIxZqa1NqOq+2oyNn+UtfYiYLO19h2gaVirE6mkqKh27dFcR1Wha1/t8mtl5ZbHP1zM0OxvqJecxGvD+3PNgI4KXSKRVlXo2ld7pASredOtrj3K1SR4rTPG3A00N8ZcCayJcE2S4FJSatcezXX4fLVrl19avWUnw/71LY9/uITze7fl7VED6NWumddliSQGU80bVXXtkeKv5k23uvYoV5PgdQWwBfgGZ7Tr9xGtSBLe2LHgr3RGAL/faY+1OirmhNW0XfZ4f/4aznziC+at3MKjF6fzj0t706ieTogq4ppO1bxRVdceKeljwVfpzdjnd9pjUE3exXYBLwI7cc5gr//VJaIqJq6PGeMc1ktJccKOmxPrw1VHxQT67Gzn8KLP54QuTayvXnFJGQ/97wf+800hPQ5vwrhhfejYupHXZYkknooJ9MuyncOLxueELjcn1sOeCfR5Y5zDi/4UJ3TF4MR6qNnk+tdwgtfpQAugjbX2VBdq+5km14skhqU/bWfkxFx+WL2VP5zYgT+d0ZV6yfpfT0Riy74m19dkxKultfZtY8yN1tozjDFfhbk+EUlw1lom5yzn3jcX0KCujxevOpaTux3idVkiImFXk+C1zRgzDZhpjDkL2BbZkkQkkWwtLuH/ps7l7Tmr6d+pJf+4tDdtmtT3uiwRkYioSfC6GOhurZ1ljEkHLo1wTSKSIHKLNjFqUi6rNhdz2+lduf6kTvh0mggRiWM1OXN9MTAr9H1exCsSkbhXXm559vMfefT9RbRpUp/J1/XjmNQWXpclIhJx+my2iLjqp23F3DI5jy+WrOesow7loQt70bRBHa/LEhFxhYKXiLjms8XruGXybLbvKuWhC49i6LHtMUaHFkUkcSh4iUjE7S4t55H3F5H9+Y90bdOYidf2o0ubxl6XJSLiOgUvEYmogvU7GDUplzkrtvC7finceXZ36tfRublEJDEpeIlIxEzLXcmd0+aRZOCZ3x3NGT0P87okERFPKXiJSNjt2FXK3W/M57VZK8hIbc4Tw/rQtlkDr8sSEfGcgpeIhNW8lVsYNTGX/A07GHVKZ0b9pgvJviSvyxIRiQoKXiISFtZaXvyqgL9OX0iLhnWZcE0/ju/U0uuyRESiSkT+DTXGtDDGnGaMaRWJ7UvVAgFIS4OkJOc2EPBmG/FkxAhITgZjnNsRI2q/jUR4XTZs38Uf/pPDfW8vYOARrfjfTQMiF7ryAzAtDSYkObf5HnXGjBEwMRkmGOd2xgHsHNHyXFRHfApHf+o1Cbuwj3gZY5oDbwPvAI8ZY06x1q6rYr3nge7AO9baB8JdR6IJBCArC4JBZ7mw0FkGyMx0bxvxZMQIePrpPctlZXuWx4+v2TYS4XX5etl6Rk+azeZgCfee250r+6dF7txc+QGYkQVloc4IFjrLAB1c7IwZI2DpXjuHLduz3LeGO0e0PBfVEZ/C0Z96TSLCWGvDu0FjTgJ2WWu/NcY8AnxgrX2v0joXAudZa68yxrwAPGStXVLdNjMyMmxOTk5Y64w3aWnOH+TKUlOhoMC9bcST5GQnbFXm80Fpac22Ec+vS2lZOY9/uIR/frqUDq0aMm5YH3oc3jSyDzotzXnzr8yfCoMLIvvYe5uY7IStyowPhtVw54iW56I64lM4+lOvyQEzxsy01mZUdV/YR7ystZ+FHnQg0Be4r4rVBgGTQ9+/D5wI/CJ4GWOygCyAlJSUcJcZd4qKatceqW3Ek6pC177aqxKvr8uKTUFumjSbmYWbuCSjHfee1wN/XRemjAaredLVtUdKVaFrX+1ViZbnojriUzj6U69JRERqjpcBLgU2ASVVrNIQWBn6fiPQpvIK1tpsa22GtTajdevWkSgzrlSXTWuTWcOxjXjiq+Ycn9W1VyUeX5fpc1dz1hNfsGjNNp4Y2puHh6S7E7oA/NU86eraI8VUsxNU116VaHkuqiM+haM/9ZpERESCl3XcAMwBzqtile1AxUl9GkWqjkQydiz4/b9s8/uddje3EU8q5lHVtL0q8fS6FJeU8X+vz2V4YBYdWjXknVEncn7vtu4WkT4WfJU6w+d32t3UqZqdoLr2qkTLc1Ed8Skc/anXJCLCHniMMbcbY64ILTYDNlex2kycw4sA6UBBuOtINJmZkJ3tzPsxxrnNzq7d5OtwbCOejB8Pw4fvGeHy+Zzlmk6sh/h5XRat2cZ5T33JhO+KuO6kjky5vj+pLRu6V0CFDpnQN9uZY4Jxbvtmuz/Rt+946Dx8zwiX8TnLNZ1YD9HzXFRHfApHf+o1iYhITK5vjjN/qx4wD/gnMMxae+de6zQBvgA+As4E+llrt1S3TU2uF/GGtZbAd0Xc//YCGtdP5rFLejPwCB36FxHZF7cn128CTqvUfGeldbYaYwaF1nt4X6FLRLyxJVjCHVPnMH3eGgZ0acVjl/SmdeN6XpclIhLTPDtzfSigTd7viiLiupyCjdw0aTZrtxbz5zO7ce2AjiQlRejcXCIiCUSXDBKRn5WVW8Z/spTHP1pC22YNeHV4f3q3b+Z1WSIicUPBS0QAWLOlmNGv5PLtjxs5L/1wxl7Qk8b163hdlohIXFHwEhE++mEtt07Jo7iknL8P6cWQY9pF7rI/IiIJTMFLJIHtKi3jof8t5N9fF9D9sCaMu6wPnVo38rosEZG4peAlkqCWrdvOyAm5LFi9lav6p3HHmd2oX6cWZ14XEZFaU/ASSTDWWl6duYJ73pxPveQknrsig1O7/+qqXSIiEgEKXiIJZFtxCXdOm8cbs1dxXIcWPDG0D4c2re91WSIiCUPBSyRB5C3fzMiJuazYFOTm047ghpM749O5uUREXKXgJRLnysstz335Iw+/u4g2Teoz+brjyUhr4XVZIiIJScFLJI6t27aLW6bk8fnidZzR41D+dlEvmvp1bi4REa8oeInEqc8Xr+PmyXlsKy7hgcE9yTwuRefmEhHxWJLXBUh0CQQgLQ2SkpzbQMDriqS2SsrKeWj6D1zxwgya++vw5o0n8rt+qQpd4ZYfgGlpMCHJuc0/gF+WcGwjWkRLf0RDn0ZDDdFUh/yCRrzkZ4EAZGVBMOgsFxY6ywCZmd7VJTVXtCHIyEm55C3fzLC+Kdx9Tnca1NW5ucIuPwAzsqAs9MsSLHSWATrU8JclHNuIFtHSH9HQp9FQQzTVIb9irLVe17BfGRkZNicnx+sy4l5amhO2KktNhYICt6uR2nozbxVjps4FA3+9sBdn9zrM65Li17Q05w9ZZf5UGFzg3jaiRbT0RzT0aTTUEE11JChjzExrbUZV92nES35WVFS7dokOwd2l3PvmfCbnrOCY1OY8MbQ37Zr7vS4rvgWr+aWorj1S24gW0dIf0dCn0VBDNNUhv6I5XvKzlJTatYv35q/awjnjvmTKzBXceHJnXsnqp9DlBn81vxTVtUdqG9EiWvojGvo0GmqIpjrkVxS85Gdjx4K/0t9sv99pl+hireXfX+VzwT+/ZntxKYE/HMetp3cl2adfaVekjwVfpV8Wn99pd3Mb0SJa+iMa+jQaaoimOuRX9C4tP8vMhOxsZ06XMc5tdrYm1kebTTt2c+1/Z3LvWws4sUsrpt80gP6dW3ldVmLpkAl9s535Mhjntm927SYth2Mb0SJa+iMa+jQaaoimOuRXNLleJIZ8++MGRk+azcYdu7njzG78/oQ0nSZCRCTKaHK9SIwrLSvnyY+X8tTHS0ht2ZCpV/anZ9umXpclIiK1pOAlEuVWbt7J6Em5fF+wiQuPbst95/ekUT396oqIxCK9e4tEsXfnreH21+ZQWlbO45f2ZnCftl6XJCIiB0HBSyQKFZeU8cA7C3j52yKOatuUccP6kNaqoddliYjIQVLwEokyS9ZuY+TEXBau2ca1Azpw2+ndqJusDyCLiMQDBS+RKGGtZdL3y/nLW/NpWDeZF39/LCd3PcTrskREJIwUvESiwJadJfzf1Lm8M3c1J3ZuxWOXpHNIk/pelyUiImGm4CXisZmFmxg1MZe1W4u5/YxuXDewI0lJOjeXiEg8UvAS8UhZueWZz5bx2AeLOaxpfSZffzxHpzT3uiwREYkgBS8RD6zdWszNk2fz1dINnNPrMB688Cia1K/jdVkiIhJhCl4iLvtk4U/cMiWP4O5S/nbRUVyS0V6X/RERSRAKXiIu2VVaxsPvLuL5L/PpdmhjnrqsH50Paex1WSIi4iKdHEjEBfnrd3DR01/z/Jf5XHF8KtNuOEGhS2DGCJiYDBOMcztjhNcVeUv9sUd+AKalwYQk5zY/4HVFBy6enksYaMRLJMKmzlrBXdPmkexL4tnLj+H0Hod6XZJEgxkjYOnTe5Zt2Z7lvuO9qclL6o898gMwIwvKgs5ysNBZBuiQ6V1dByKenkuYGGut1zXsV0ZGhs3JyfG6DJFa2b6rlLumzeP13JX07dCCxy/tzeHNGnhdlkSLiclOuKjM+GBYqfv1eE39sce0NCegVOZPhcEFbldzcOLpudSCMWamtTajqvs04iUSAXNXbGHkxFkUbQwy+tQujDylCz6dm0v2VlXI2Fd7vFN/7BEsql17NIun5xImCl4iYVRebnnhq3z+9u5CWjWqx8Rr+3Fcx5ZelyXRyPiqH+FJROqPPfwp1YwSpbhfy8GKp+cSJppcLxIm67fv4ur/fM8D7/zAoK6H8L9RAxS6pHqdsmrXHu/UH3ukjwWf/5dtPr/THmvi6bmEiUa8RMLgq6XrGf3KbLbsLOG+83tweb9UnZtL9q1iwviybGekx/ickJFoE8krqD/2qJh0njfGOSTnT3GCSixORo+n5xImmlwvchBKysr5xweLefqzZXRs1ZBxw46m++FNvC5LREQ8pMn1IhGwfGOQUZNyyS3azNBj23P3ud3x19WvlIiIVE9/JUQOwDtzVnPH1DlgYdywPpybfrjXJYmISAxQ8BKphZ27y/jLW/OZ9P1yerdvxrhhfWjfwr//HxQREUHBS6TGFq7Zyo0Tclm2bjvDB3Xi5tOOoI5PHwwWEZGaU/AS2Q9rLS9/W8j97/xA0wZ1eOnq4zixSyuvyxIRkRik4CWyD5uDu7n9tTm8N38tJx3RmkcvSadVo3pelyUiIjFKwUukGjPyNzJ6Ui7rtu/izrOP5OoTOpCky/6IiMhBUPASqaSs3PLUx0t54qPFpLTw89rw/vRq18zrskREJA4oeInsZfWWndw0aTYz8jdyQZ+23D+4J43q6ddERETCQ39RREI+WLCW217NY3dpOY9enM5Fx7TzuiQREYkzCl6S8IpLynjofz/wn28K6XF4E8YN60PH1o28LktEROKQgpcktKU/bWfkxFx+WL2Vq0/owO1ndqVess/rskREJE4peElCstYyJWcF97w5nwZ1fbxwVQandGvjdVkiIhLndNptSThbi0sYNWk2f3ptDn1SmjH9pgEKXTWRH4BpaTAhybnND3hdkbeipT9mjICJyTDBOLczRnhTR7T0h0iU04iXJJTcok2MmpTLqs3F3HZ6V64/qRM+nZtr//IDMCMLyoLOcrDQWQbokOldXV6Jlv6YMQKWPr1n2ZbtWe473r06oqU/RGKARrwkIZSXW57+dBkXP/MN5eUw+bp+3HByZ4Wumsobs+ePaoWyoNOeiKKlP5Zl1649UqKlP0RigEa8JO79tK2YWybn8cWS9Zx11KE8dGEvmjao43VZsSVYVLv2eBct/WHLatceKdHSHyIxQMFL4tpni9dxy+TZbCsu5cELjmJY3/YYo1GuWvOnOIePqmpPRNHSH8ZXdcgyLn8yN1r6QyQG6FCjxKXdpeU8+L8fuPKFGbRsWI+3Rp7IZcelKHQdqPSx4PP/ss3nd9oTUbT0R6es2rVHSrT0h0gM0IiXxJ3CDTsYNTGXvBVb+F2/FO48uzv16+jcXAelYoJ03hjn8JE/xfmjmqgTp6OlPyom0C/Ldka+jM8JXW5OrIfo6Q+RGGCstV7XsF8ZGRk2JyfH6zIkBkzLXcmd0+aRZODhIb04o+dhXpckIiIJxhgz01qbUdV9GvGSuLBjVyl3vzGf12atICO1OU8M60PbZg28LktEROQXFLwk5s1buYVRE3PJ37CDUad0ZtRvupDs0/RFERGJPgpeErOstbz4VQF/nb6Q5g3rMOGafhzfqaXXZYmIiFRLwUti0sYdu7ltSh4fLfyJU488hIeHpNOiYV2vyxIREdknBS+JOV8vW88fX5nNph0l3Htud67sn6bTRIiISExQ8JKYUVpWzhMfLeGpT5bSoVVDXrjqWHoc3tTrskRERGpMwUtiwopNQW6aNJuZhZu4+Jh23HteDxrW0+4rIiKxRX+5JOpNn7ua21+bQ7mFJ4b25vzebb0uSURE5IAoeEnUKi4p4763FzDhuyLS2zXlyWF9SG3Z0OuyREREDpiCl0SlxWu3ceOEWSxeu53rBnbklt92pW6yzs0lIiKxTcFLooq1lgkzirjvrQU0rp/Mf6/uy8AjWntdloiISFgoeEnU2BIs4Y6pc5g+bw0DurTisUt607pxPa/LEhERCRsFL4kKOQUbuWnSbNZuLebPZ3bj2gEdSUrSublERCS+aNKMeKqs3PLUx0u4NPtbfEmGV4f357qTOil0SWTlB2BaGkxIcm7zA7FbR7Q8FxGpEY14iWfWbCnmj6/M5psfN3Be+uGMvaAnjevX8bosiXf5AZiRBWVBZzlY6CwDdMiMrTqi5bmISI1pxEs88dEPaznzic+ZvXwzfx/SiyeG9lboEnfkjdkTVCqUBZ32WKsjWp6LiNSYRrzEVbtKy/jr9IW8+FUBRx7WhHHD+tD5kEZelyWJJFhUu/ZoriNanouI1JiCl7jmx3XbGTkxl/mrtnJV/zTuOLMb9ev4vC5LEo0/xTkkV1V7rNURLc9FRGpMhxol4qy1vDpzBeeM+5JVm3fy3BUZ3HteD4Uu8Ub6WPD5f9nm8zvtsVZHtDwXEakxjXhJRG0rLuGuafOYNnsVx3VowRND+3Bo0/pelyWJrGLSed4Y55CcP8UJKm5PRg9HHdHyXESkxoy11usa9isjI8Pm5OR4XYbUUt7yzYyalMvyjUFGn3oEN5zcGZ9OEyEiInHOGDPTWptR1X0a8ZKwKy+3PPfljzz87iIOaVyPV647nmPTWnhdloiIiOcUvCSs1m3bxa1T8vhs8TpO79GGv13Ui2b+ul6XJSIiEhUUvCRsvliyjj++kse24hIeGNyTzONSMEaHFkVERCooeMlBKykr59H3F/PMZ8vockgjAtccR9dDG3tdloiISNRR8JKDsnxjkJETc5m9fDPD+qZw9zndaVBXp4kQERGpioKXHLA381YxZupcMPDPy47m7F6HeV2SiIhIVFPwkloL7i7l3jfnMzlnBUenNOOJoX1o38K//x8UERFJcApeUisLVm1l5MRZ/Lh+Bzec3InRpx5BHZ8ugCAiIlITCl5SI9Za/vtNIWP/9wPNGtQh8Ifj6N+5lddliYiIxBQFL9mvTTt286fX5vDBgrWc3LU1j1ycTstG9bwuS0REJOYoeMk+fffjBka/Mpv123dx1zndufqENJ2bS0RE5AApeEmVSsvKGffxUsZ9vITUlg15fcQJ9Gzb1OuyREREYlrYZ0UbY5oaY6YbY943xrxujPnV9WKMMcnGmCJjzKehr6PCXYccuFWbd3LZv77jiY+WMLhPW94aeaJCVzzID8C0NJiQ5NzmB7yuyDvh6Av1Z3zS6yoRFokRr0zgMWvtB8aYp4EzgDcrrdMLmGitvT0Cjy8H4b35a/jTq3MoLSvnH5emc0Gfdl6XJOGQH4AZWVAWdJaDhc4yQIdM7+ryQjj6Qv0Zn/S6igvCPuJlrR1vrf0gtNga+KmK1foB5xhjZhhjnjfG6JCnx4pLyrhr2jyue2kmKS38vDNqgEJXPMkbs+ePSYWyoNOeaMLRF+rP+KTXVVwQscBjjDkeaG6t/baKu78HTrXWrjbG/Bc4i0qjYsaYLCALICUlJVJlCrD0p23cOCGXhWu2ce2ADtx2ejfqJuvcXHElWFS79ngWjr5Qf8Ynva7igoj8dTXGtADGAVdXs8oca+3q0Pc5QJfKK1hrs621GdbajNatW0eizIRnrWXSjCLOGfcl67bt4sXfH8uYs7srdMUjfzX/vFTXHs/C0Rfqz/ik11VcEInJ9XWBKcCfrbWF1az2kjEm3RjjAwYDeeGuQ/Zty84SbpyYyx1T55KR2oLpNw3g5K6HeF2WREr6WPBVuqyTz++0J5pw9IX6Mz7pdRUXROJQ4x+Ao4ExxpgxwCdAHWvtnXutcx8wATDAm9baDyNQh1RjVtEmRk3MZfWWYv50RleuH9iJpCSdmyuuVUwMzhvjHDbxpzh/TBJxwnA4+kL9GZ/0uooLjLXW6xr2KyMjw+bk5HhdRswrL7c88/kyHn1/MYc1rc+Tw/pwdEpzr8sSERGJK8aYmdbajKru06cJE8RPW4v54+TZfLV0A2f3OowHLziKpg3qeF2WiIhIQlHwSgCfLPqJWyfnsWN3KX+76CguyWivy/6IiIh4QMErju0uLefhdxfy3Jf5dDu0Ma9c1o/OhzT2uiwREZGEpeAVp/LX72DUxFzmrtzCFcen8n9nHUn9Oj6vyxIREUloCl5x6PXcFdz5+jySfUk8e/kxnN7jUK9LEhERERS84sr2XaXc/cY8ps5aSd+0Fjw+tDeHN2vgdVkiIiISouAVJ+au2MKoSbkUbtjB6FO7cOPJnUn26Qz0IiIi0UTBK8ZZa3n+y3z+9u5CWjWqx8Rr+3Fcx5ZelyUiIiJVUPCKYRu27+LWKXl8smgdp3Vvw8MX9aJ5w7pelyUiIiLVUPCKUV8vXc/oV2azeWcJ953fg8v7percXCIiIlFOwSvGlJSV848PFvP0Z8vo2Koh//59X7of3sTrskRERKQGFLxiyPKNQUZNyiW3aDOXZrTnnvO646+rl1BERCRW6K92jHhnzmrumDoHLIwb1odz0w/3uiQRERGpJQWvKLdzdxn3vT2fiTOW07t9M8YN60P7Fn6vy5LayA9A3hgIFoE/BdLHQodMr6tKbDNGwLJssGVgfNApC/qO97oqEUkACl5RbOGarYyckMvSddsZPqgTN592BHV0bq7Ykh+AGVlQFnSWg4XOMih8eWXGCFj69J5lW7ZnWeFLRCJMf8WjkLWWl74t5PynvmLzzhL+e3Vfbj+jm0JXLMobsyd0VSgLOu3ijWXZtWsXEQkjjXhFmc3B3dz+2hzem7+Wk45ozaOXpNOqUT2vy5IDFSyqXbtEni2rXbuISBgpeEWR7ws2ctPEXNZt38WYs47kDyd2IClJ5+aKaf4U5/BiVe3iDeOrOmQZn/u1iEjC0bGrKFBWbnniwyVc+uw31ElO4rXh/bl2YEeFrniQPhZ8lT4M4fM77eKNTlm1axcRCSONeHls9ZadjJ40m+/yNzK49+HcP7gnjevX8bosCZeKCfT6VGP0qJhAr081iogHjLXW6xr2KyMjw+bk5HhdRth9sGAtt72ax+7Scu4/vycXHdPO65JERETkIBljZlprM6q6TyNeHiguKeOv0xfy768L6HF4E8YN60PH1o28LktEREQiTMHLZUt/2s7Iibn8sHorV5/QgdvP7Eq9ZE3qFRERSQQKXi6x1jJl5grueWM+Der6eOGqDE7p1sbrskRERMRFCl4u2Fpcwp2vz+PNvFUc37Eljw/tTZsm9b0uS0RERFym4BVhs5dvZuTEWazaXMxtp3fl+pM64dNpIkRERBKSgleElJdbsr/4kUfeW0SbJvWZfF0/jklt4XVZIiIi4iEFrwj4aVsxt0zO44sl6zmz56H89cJeNPXr3FwiIiKJTsErzD5bvI5bJs9mW3EpD15wFMP6tscYHVoUERERBa+w2V1azqPvL+LZz3/kiDaNmHBtP45o09jrskRERCSKKHiFQeGGHYyamEveii1kHpfCXed0p34dnZtLREREfknB6yC9MXslY16fR5KBpzOP5syjDvO6JBEREYlSCl4HaMeuUu55cz6vzlxBRmpznhjWh7bNGnhdloiIiESxJK8LiEXzV23h3Ke+5LVZKxh1SmcmZfVT6NpLIABpaZCU5NwGAl5XFAfyAzAtDSYkObf56tSDov6U6mjfkAjTiFctWGv599cFPPS/hTRvWIcJ1/Tj+E4tvS4rqgQCkJUFwaCzXFjoLANkZnpXV0zLD8CMLCgLdWqw0FkG6KBOrTX1p1RH+4a4wFhrva5hvzIyMmxOTo6nNWzcsZs/vZrHhz/8xKlHHsLDQ9Jp0bCupzVFo7Q0J2xVlpoKBQVuVxMnpqU5fwAq86fC4AK3q4l96k+pjvYNCRNjzExrbUZV92nEqwa+WbaB0a/ksmlHCfec252r+qfp3FzVKCqqXbvUQLCazquuXfZN/SnV0b4hLtAcr30oLXPOzXXZc9/SsG4yU0f05/cndFDo2oeUlNq1Sw34q+m86tpl39SfUh3tG+ICBa9qrNy8k6HZ3zLu46UMObodb408kZ5tm3pdVtQbOxb8/l+2+f1Ouxyg9LHgq9SpPr/TLrWn/pTqaN8QF+hQYxXenbeaP706h3ILTwztzfm923pdUsyomEA/ZoxzeDElxQldmlh/ECom9eaNcQ55+FOcPwSa7Htg1J9SHe0b4gJNrt9LcUkZ97+9gMB3RaS3a8qTw/qQ2rJhxB9XRERE4ocm19fA4rXbGDkhl0Vrt3HdwI7c8tuu1E3WkVgREREJHwUvYGbhRjKf+45G9ZL5z9V9OemI1l6XJCIiInFIwQvo2bYpQ49NYcTJnTikcX2vyxEREZE4peAF1Ev2ce95PbwuQ0REROKcJjGJiIiIuETBS0RERMQlCl4iIiIiLlHwEhEREXGJgpeIiIiISxS8RERERFyi4CUiIiLiEgUvEREREZcoeImIiIi4RMFLREQOXn4ApqXBhCTnNj+Q2HWIVEOXDBIRkYOTH4AZWVAWdJaDhc4yQIfMxKtDZB804iUiIgcnb8yesFOhLOi0J2IdIvug4CUiIgcnWFS79nivQ2QfFLxEROTg+FNq1x7vdYjsg4KXiIgcnPSx4PP/ss3nd9oTsQ6RfVDwEhGRg9MhE/pmgz8VMM5t32z3J7RHSx0i+2CstV7XsF8ZGRk2JyfH6zJERERE9ssYM9Nam1HVfRrxEhEREXGJgpeIiIiISxS8RERERFyi4CUiIiLiEgUvEREREZcoeImIiIi4RMFLRERExCUKXiIiIiIuUfASERERcYmCl4iIiIhLFLxEREREXKLgJSIiIuISBS8RERERlyh4iYiIiLhEwUtERETEJQpeIiIiIi5R8BIRERFxiYKXiIiIiEsUvERERERcouAlIiIi4hIFLxERERGXKHiJiIiIuETBS0RERMQlCl4iIiIiLlHwEhEREXGJgpeIiIiISxS8RERERFyi4CUiIiLiEgUvEREREZcoeImIiIi4RMFLRERExCUKXiIiIiIuUfASERERcYmCl0gsyA/AtDSYkOTc5ge8rkhERA5Acrg3aIxpCkwCfMAO4FJr7e4q1nse6A68Y619INx1iMSN/ADMyIKyoLMcLHSWATpkeleXiIjUWiRGvDKBx6y1vwXWAGdUXsEYcyHgs9YeD3Q0xnSJQB0i8SFvzJ7QVaEs6LSLiEhMCfuIl7V2/F6LrYGfqlhtEDA59P37wInAkr1XMMZkAVkAKSkp4S5TJHYEi2rXLiIiUStic7yMMccDza2131Zxd0NgZej7jUCbyitYa7OttRnW2ozWrVtHqkyR6Oev5h+P6tpFRCRqRSR4GWNaAOOAq6tZZTvQIPR9o0jVIRIX0seCz//LNp/faRcRkZgS9sBjjKkLTAH+bK0trGa1mTiHFwHSgYJw1yESNzpkQt9s8KcCxrntm62J9SIiMSjsc7yAPwBHA2OMMWOAT4A61to791pnGvCFMeZw4EygXwTqEIkfHTIVtERE4kAkJtc/DTy9n3W2GmMGAacBD1trt4S7DhEREZFoE4kRrxqx1m5izycbRUREROKeJrWLiIiIuETBS0RERMQlCl4iIiIiLlHwEhEREXGJgpeIiIiISxS8RERERFyi4CUiIiLiEgUvEREREZcoeImIiIi4RMFLRERExCUKXiIiIiIuUfASERERcYmCl4iIiIhLFLxEREREXKLgJSIiIuISBS8RERERlyh4iYiIiLhEwUtERETEJcZa63UN+2WMWQcUuvBQrYD1LjxOolB/hp/6NLzUn+GnPg0v9Wf4udGnqdba1lXdERPByy3GmBxrbYbXdcQL9Wf4qU/DS/0ZfurT8FJ/hp/XfapDjSIiIiIuUfASERERcYmC1y9le11AnFF/hp/6NLzUn+GnPg0v9Wf4edqnmuMlIiIi4hKNeImIiIi4RMFLwsIY08YYk1vNfcnGmCJjzKehr6Pcrk8SV032P+2jEg2MMeONMedWc5/20TiRkMFrXyEhdP/zxphvjDF3ullXjHsEaFDNfb2AidbaQaGvuS7WFVNq+uaqfbRWarL/aR89APsKCqH7tZ/WkDFmAHCotfatalbRPloLxpjhe72PzjbGPFvNeq7vowkZvNhHSDDGXAj4rLXHAx2NMV1crSwGGWNOAXYAa6pZpR9wjjFmRmgnT3avupiz3zdX7aO1VpP9T/toLe0vKGg/rTljTB3gX0CBMeb8albTPloL1tqnK95HgS9w+vcXvNpHEy541SAkDAImh75/HzjRhbJiljGmLnAXcMc+VvseONVa2xeoA5zlRm0xqiZvroPQPlobNdn/tI/WQg2DwiC0n9bUFcAC4GGgrzFmZBXraB89AMaYtkAba21OFXcPwoN9NKGCVw1DQkNgZej7jUCbSNcV4+4AxltrN+9jnTnW2tWh73MA/edbvZq8uWofrZ2a7H/aR2unJkFB+2nN9QGyrbVrgJeBk6tYR/vogbkBeLqa+zzZRxMqeFGzkLCdPYchG5F4fVRbpwI3GGM+BXobY56rYp2XjDHpxhgfMBjIc7G+WFOTN1fto7VTk/1P+2jt1CQoaD+tuaVAx9D3GVR9bWLto7VkjEnC2Tc/rWYVT/bRRPtFqElImMme4cZ0oMCd0mKTtXbgXsfRZwOPGWMeqLTafcBLofu/sdZ+6GqRsaUmb67aR2vnF/sfsEr76EGrSVDQflpzzwMnG2M+B0YAr2ofDYsBwHe2+hOWerKPJuwJVEPhawRwmbX2zr3am+BMxPsIOBPoZ63d4kmRknCMMT2BCYAB3gQCaB+VKGOMaQy8gHNopg5wK3Cm9lOJJsaYB4Eca+1UY0x3ouS9NGGD174YY5oDpwGfh4bSRaKK9lGJBdpPJdp5sY8qeImIiIi4JNHmeImIiIh4RsFLRERExCUKXiISt0IfognbejXcVpoxZtBey1cZY64K1/ZFJLYpeImIhFcazhmxRUR+Rdd6EhHPGWMaAFOAJsAG4GKgLvBf4BBgrrX2BmPMvcBxgB9YBwwFLM75jVKB9cAQa23JQdRigGzgiNBjXApcjnOen3TgUOASYD7OyUM74Zz9ujD09XugWWjU6+LQZtONMR9X/Ky1dt6B1icisU0jXiISDboD5dbagcCLOGeRzgLmhdoOM8b0Cq37hbX2JGAtcD7QEngHOAnYChx9kLWcD9QJPUYRcHao/VjgdOCvwHlAc+AQa20/oIO19mZr7RPAaODfoRMLr6vmZ0UkQSl4iUg0mAXMM8a8jxNQgkBX4ILQ/KuOQNvQujNDt3NwDuuVAOfgjJh1ZM8lQA5UV+D40OMOZM/12yaGRtKKcEbjgkA9Y8x3OCe63ZfKPysiCUrBS0SiQTrwlbX2tzgjSQOARcDjoctR3YkTWgD6hm774Fy65kJgXuh2JQdvETAp9LijcS4GDbCj0np9gdettcdZax/dq30nzqHQisOWVf2siCQoBS8RiQYFwChjzNc486BygH8BZ4auX3c9sDy07rGh0ahmwNvAVzjzsL4EWrBnZOxAvQkcboz5DHiAqq9DCLAQuNkY84kx5jVjzIBQey7Q1RjzRaguEZGf6cz1IhIzQpPrP7XWfupxKRhjzgb+BOzGGeWaYK2d5G1VIhLtFLxEREREXKJDjSIiIiIuUfASERERcYmCl4iIiIhLFLxEREREXKLgJSIiIuISBS8RERERl/w/0RmBVkcBPXIAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画布大小\n",
    "plt.figure(figsize=(10,10))\n",
    "\n",
    "# 中文标题\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.title('鸢尾花线性数据示例')\n",
    "\n",
    "plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)\n",
    "plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')\n",
    "\n",
    "# 画感知机的线\n",
    "x_ponits = np.arange(4, 8)\n",
    "y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]\n",
    "plt.plot(x_ponits, y_)\n",
    "\n",
    "# 其他部分\n",
    "plt.legend()  # 显示图例\n",
    "plt.grid(False)  # 不显示网格\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ce3d8b4",
   "metadata": {},
   "source": [
    "#### 注意 !\n",
    "在上图中，有一个位于左下角的蓝点没有被正确分类，这是因为 SKlearn 的 Perceptron 实例中有一个tol参数。\n",
    "\n",
    "tol 参数规定了如果本次迭代的损失和上次迭代的损失之差小于一个特定值时，停止迭代。所以我们需要设置 tol=None 使之可以继续迭代："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "b6a60907",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2a525d23880>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "clf = Perceptron(fit_intercept=True, \n",
    "                 max_iter=1000,\n",
    "                 tol=None,\n",
    "                 shuffle=True)\n",
    "clf.fit(X, y)\n",
    "\n",
    "# 画布大小\n",
    "plt.figure(figsize=(10,10))\n",
    "\n",
    "# 中文标题\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.title('鸢尾花线性数据示例')\n",
    "\n",
    "plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)\n",
    "plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')\n",
    "\n",
    "# 画感知机的线\n",
    "x_ponits = np.arange(4, 8)\n",
    "y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]\n",
    "plt.plot(x_ponits, y_)\n",
    "\n",
    "# 其他部分\n",
    "plt.legend()  # 显示图例\n",
    "plt.grid(False)  # 不显示网格\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9dc7377b",
   "metadata": {},
   "source": [
    "现在可以看到，所有的两种鸢尾花都被正确分类了。\n",
    "\n",
    "## 第2章感知机-习题\n",
    "#### 习题2.1\n",
    "Minsky 与 Papert 指出：感知机因为是线性模型，所以不能表示复杂的函数，如异或 (XOR)。验证感知机为什么不能表示异或。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ee6d8668",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
